package yimport

import (
	"yunj/pkg/yunj/util"
)

// 导入状态码
const (
	RowStatusCodeSuccess   string = "success"   // 成功
	RowStatusCodeFail      string = "fail"      // 失败
	RowStatusCodeImporting string = "importing" // 导入中
)

// 导入状态
type RowStatus struct {
	Code string `json:"code"` // 状态码
	Desc string `json:"desc"` // 状态描述
}

// 行数据
type Row struct {
	RawData map[string]any
	Data    map[string]any
	Status  *RowStatus
	Sheet   string // 当前数据行工作表

}

// 创建行数据实例
func NewRow(rawData map[string]any) *Row {
	r := &Row{
		RawData: rawData,
		Data:    rawData,
		Status:  &RowStatus{},
	}
	// status
	statusRaw, exists := rawData["_importStatus"]
	if !exists {
		r.Fail("数据构成无效！_importStatus参数不存在")
	} else {
		statusMap, ok := statusRaw.(map[string]any)
		if !ok {
			r.Fail("数据构成无效！_importStatus参数格式错误")
		}
		util.MapToStruct(statusMap, r.Status)
	}
	if r.Status.Code == "" {
		r.Fail("数据构成无效！_importStatus参数错误")
	}
	// sheet
	if sheetRaw, exists := rawData["_sheet"]; exists {
		if sheet, ok := sheetRaw.(string); ok {
			r.Sheet = sheet
		}
	}

	return r
}

// 设置导入成功
func (r *Row) Success(desc ...string) {
	r.Status.Code = RowStatusCodeSuccess
	if len(desc) > 0 && desc[0] != "" {
		r.Status.Desc = desc[0]
	} else {
		r.Status.Desc = "导入成功"
	}
}

// 设置导入失败
func (r *Row) Fail(desc ...string) {
	r.Status.Code = RowStatusCodeFail
	if len(desc) > 0 && desc[0] != "" {
		r.Status.Desc = desc[0]
	} else {
		r.Status.Desc = "导入失败"
	}
}

// GetResponseData 获取响应数据
func (r *Row) GetResponseData() map[string]any {
	resData := r.RawData
	resData["_importStatus"] = r.Status
	return resData
}
